#include <iostream>
#include "eigen3/Eigen/Core"
#include "eigen3/Eigen/Dense"
#include "eigen3/Eigen/SVD"

int main(int argc, char** argv) {
  Eigen::Matrix3d H = Eigen::Matrix3d::Random();
  // H = H * H.transpose();
  Eigen::JacobiSVD<Eigen::MatrixXd> svd(
      H, Eigen::ComputeThinU | Eigen::ComputeThinV);
  std::cout << "eigen values: " << svd.singularValues().transpose()
            << std::endl;
  std::cout << "U: \n" << svd.matrixU() << std::endl;
  std::cout << "V: \n" << svd.matrixV() << std::endl;
}
